import re

from django.views import View
# 导入返回响应
from SaaSDevelTool.data_return_response import create_response
# 导入错误信息装饰器
from SaaSDevelTool.data_return_response import error_message_detection
# 查询当前参数是否是int类型
from SaaSDevelTool.data_operation import is_number
# 获取数据库连接
from SaaSDevelTool.data_mysql_data import db
# 获取当前时间
from SaaSDevelTool.data_datetime_func import get_datatime
# 导入解析用户信息函数
from SaaSDevelTool.data_user_func import user

"""
用户修改
"""


class SaaSDevelUserRbacUpdate(View):
    @error_message_detection
    def post(self, request):
        # 获取用户名称
        user_name = request.POST.get("user_name")
        # 获取用户手机号
        user_mobile = request.POST.get("user_mobile")
        # 获取用户组编号
        role_id = request.POST.get("role_id")
        # 获取用户编号
        user_id = request.POST.get("user_id")

        # 判断参数是否传递完整
        if not all([user_name, user_mobile, role_id, user_id]):
            return create_response(code=400, msg="修改失败，用户名称与手机号，用户组，用户编号为必传参数。")

        # 判断手机号格式
        if not re.findall(r"^1[3-9]\d{9}$", user_mobile):
            return create_response(code=400, msg="修改失败，手机号格式错误。")

        # 判断用户编号
        if not is_number(user_id):
            return create_response(code=400, msg="修改失败，用户编号格式错误。")

        # 判断手机号是否已存在
        query_base_info_user_table_sql = """
            SELECT 
                user_name,
                user_mobile
            FROM 
                db_center_rbac.base_info_user_table 
            WHERE 
                user_mobile = '{}' 
            AND 
                user_id != {}
            ;""".format(user_mobile, user_id)
        # 获取到对应的值
        query_base_info_user_table_data = db.findOne(query_base_info_user_table_sql)

        # 如果手机号存在的情况下
        if query_base_info_user_table_data:
            return create_response(
                code=400, msg="修改失败，当前手机号已被【{}】注册。"
                .format("**" + query_base_info_user_table_data['user_name'][-1]))
        # 解析用户信息
        user_message = user.get_user(request)
        # 编写修改接口
        update_base_info_user_table_sql = """
            UPDATE 
                db_center_rbac.base_info_user_table
            SET 
                user_name = '{}',
                user_mobile = '{}',
                update_user = {},
                update_time = '{}'
            WHERE
                user_id = {}
            ;""".format(user_name, user_mobile, user_message['user_id'], get_datatime(), user_id)
        # 执行修改语句
        db.update(update_base_info_user_table_sql)
        # 返回响应
        return create_response(code=200, msg="账户信息修改成功!")
